add_symbol(x)find_symbol(x): ask type in semantics / memory location in cgenremove_symbol(x)enter_scope()exit_scope()check_scope(x)add $r1, $r2, $r3, just add it bitwisely.TypeCheck(Environment, e1+e2) = {
T1 = TypeCheck(Environment, e1);
T2 = TypeCheck(Environment, e2);
Check T1 == T2 == Int;
return Int;
}
TypeCheck(Environment, let x:T <- e0 in e1) = {
T0 = TypeCheck(Environment, e0);
T1 = TypeCheck(Environment.add(x:T), e1);
Check subtype(T0,T);
return T1;
}
In [ ]: